package com.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dao.DepDao;
import com.pojo.Dep;
import com.service.IDepService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DepServiceImpl implements IDepService {

    @Autowired
    private DepDao depDao;

    @Override
    public int addDep(Dep dep) {
        return depDao.insert(dep);
    }

    @Override
    public IPage searchDep(int page, int limit, Integer depId, String depName) {
        //封装分页参数
        Page pageParam = new Page(page,limit);

        //封装查询参数
        QueryWrapper q = new QueryWrapper();
        if (depId!=null)
        {
            q.eq("depId",depId);
        }
        if (depName!=null && depName.length()>0)
        {
            q.like("depName", "%"+depName+"%");
        }
        //查
        IPage  result =  depDao.selectPage(pageParam, q);

        return result;
    }


    /**
     * 将方法的运行结果进行缓存，以后再要相同的数据，直接从缓存中获取，不在调用方法；
     *
     * CacheManager管理多个Cache组件的，对缓存的真正CRUD操作在Cache 组件中，每个缓存组件有自己的唯一的一个名字，
     * 几个熟悉：
     *          CacheName/value  :指定缓存组件的每次：
     *          key:缓存数据使用的key:可以用它来指定，默认是使用方法参数的指  1-方法的返回值
     *              编写SpEl #id:参数的id 指  @a0  #p0  #root.args[0]
     *          keyGeneratar:key的生成器：可以自己指定key 的生成器的组件id
     *                  key/keyGenerater:二选一使用
     *          cacheManager:指定缓存管理器：或者cacheResolver指定获取解析器
     *          condition:指定符合条件的情况下才缓存：
     *          unluess:否定缓存，当unless 指定的条件为true,方法的返回值就不会被缓存，可以获取到结果进行判断
     *          sync:是否使用异步模式
     *       原理2：
     *     1.自动配置类：CacheAutoConfiguration
     *     2.缓存的配置类：
     *
     *  运行流畅：
     *      方法运行之前，先去查询Cache(查询缓存组件)，按照cacheNames 指定的名称获取，
     *      （）
     * @param depId
     * @return
     */
//    @Cacheable(cacheNames = {"emp"},condition = "#id>0",unless = "#result==null")
    @Cacheable(cacheNames = {"dep"})
    @Override
    public Dep findById(Integer depId) {
        System.out.println("查询："+depId+"部门Id");
        Dep dep = depDao.selectById(depId);
        return dep;
    }

    @Override
    public List findAll() {
        return depDao.selectList(null);
    }
}
